package com.example.lib.io;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * 将C盘一个文本文件复制到D盘。
 * <p>
 * 复制的原理：其实就是将C盘下的文件数据存储到D盘中的一个文件中。
 * 步骤：
 * 1.在D盘创建一个文件，用于存储C盘文件中的数据。
 * 2.定义读取流和C盘文件关联。
 * 3.通过不断的读写完成数据存储。
 * 4.关闭资源。
 */

public class h_io_copyfile_18_13 {
    public static void main(String[] args) throws IOException {
//        copy_1();
        copy_2();
    }

    //每次读取一个字符数组，一般定义为1024长度。
    public static void copy_2() {
        FileWriter fw = null;
        FileReader fr = null;
        try {
            fw = new FileWriter("D://demo.java");
            fr = new FileReader("C://f_io_FileReader_18_11.java");

            char[] buf = new char[1024];
            int len = 0;
            while ((len = fr.read(buf)) != -1) {
                fw.write(buf, 0, len);
            }

        } catch (IOException e) {
            throw new RuntimeException("读写失败");//或者将创建的demo.java删除。
        } finally {
            if (fr != null) {
                try {
                    fr.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if (fw != null) {
                try {
                    fw.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }

    //从C盘读一个字符，就往D盘写一个字符。
    public static void copy_1() throws IOException {
        //创建目的地。
        FileWriter fw = new FileWriter("D://demo.java");
        //与已有文件关联。
        FileReader fr = new FileReader("C://f_io_FileReader_18_11.java");

        int ch = 0;
        while ((ch = fr.read()) != -1) {
            fw.write(ch);
        }

        fr.close();
        fw.close();
    }

}
